package top.seefly.cloudstream.controller;

import lombok.AllArgsConstructor;
import org.springframework.cloud.stream.function.StreamBridge;
import org.springframework.http.HttpStatus;
import org.springframework.util.MimeTypeUtils;
import org.springframework.web.bind.annotation.*;

/**
 * @author liujianxin
 * @date 2023/07/30 10:46
 */
@RestController
@RequestMapping("/rest")
@AllArgsConstructor
public class RestInputController {

    private final StreamBridge streamBridge;


    /**
     * 我们使用 StreamBridge 将数据发送到 rest binding。
     * 在这里，您还可以受益于 StreamBridge 的动态功能，如果 myBinding 不存在，它将自动创建并缓存，否则将使用现有绑定。
     *
     * 如果存在许多动态目标，缓存动态目标（绑定）可能会导致内存泄漏。为了进行一定程度的控制，我们为输出绑定提供了一个自驱逐缓存机制，默认缓存大小为 10。
     * 这意味着，如果您的动态目标大小超过该数字，则现有绑定可能会被驱逐，因此需要重新创建，这可能会导致轻微的性能下降。
     * 您可以通过 spring.cloud.stream.dynamic-destination-cache-size 属性将其设置为所需的值来增加缓存大小。
     */
    @PostMapping
    @ResponseStatus(HttpStatus.ACCEPTED)
    public void restInput(@RequestBody String body) {
        streamBridge.send("route-in-0", (Object) body, MimeTypeUtils.TEXT_PLAIN);

    }
}
